import os
import random
import time
import numpy as np
from pathlib import Path

cd = 20  # 以秒为单位
cd_times = 5  # 如果 cd 秒内发送超过 cd_times 次，就不再发送（即前cd_times


class CD:
    def __init__(self):
        self.user_list = []
        self.cd_record = []  # 记录每个人索要图片的时间（最近的cd_times次）的一个列表，列表的元素是np.matrix类型的
        textpath1 = Path(os.path.split(os.path.realpath(__file__))[0]).joinpath("data").joinpath("道德经.txt")
        textpath2 = Path(os.path.split(os.path.realpath(__file__))[0]).joinpath("data").joinpath("大悲咒.txt")

        self.content = []
        self.content = self.content + open(textpath1, "r", encoding='utf-8').readlines()
        self.content = self.content + open(textpath2, "r", encoding='utf-8').readlines()

    def check_id(self, _id):
        """
        检查用户是否在list中，是-则返回相应的序号，否-添加到列表中，并附上相应的字典，返回其序号

        :return:
        """
        if _id in self.user_list:
            return self.user_list.index(_id)
        else:
            self.user_list.append(_id)
            self.cd_record.append(np.zeros(cd_times))
            return len(self.user_list) - 1

    def update_id(self, index, i_min):
        # 替换记录
        self.cd_record[index][i_min] = time.time()

    def check_cd(self, _id):
        # 检查cd是否符合, 符合就返回0 不符合就返回-1
        index = self.check_id(_id)
        i_min = np.argmin(self.cd_record[index])
        t_min = np.min(self.cd_record[index])
        self.update_id(index, i_min)
        if time.time() - t_min < cd:
            return -1
        else:
            print(time.time() - t_min)
            return 0

    def get_text(self):
        # 获取经诗的某一行
        text = random.choice(self.content)
        return text
